import { fileURLToPath, URL } from 'node:url'

import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
import { ViteImageOptimizer } from 'vite-plugin-image-optimizer'

// https://vite.dev/config/
export default defineConfig(({ command, mode }) => {
	// 加载环境变量
	const env = loadEnv(mode, process.cwd(), '')

	return {
		plugins: [
			vue(),
			vueDevTools(),
			// 配置图片压缩插件
			ViteImageOptimizer({
				// 只在构建时启用压缩
				test: /\.(jpe?g|png|gif|tiff|webp|svg|avif)$/i,
				// 压缩 PNG 图片（使用 squoosh）
				png: {
					quality: 85, // 提高质量保持清晰度
					effort: 10,  // 最大压缩努力
				},
				// 压缩 JPG/JPEG 图片
				jpeg: {
					quality: 85, // 提高质量保持清晰度
					progressive: true, // 渐进式加载
				},
				// 压缩 WebP 图片
				webp: {
					quality: 85,
					effort: 6,
				},
				// 压缩 SVG 图片
				svg: {
					multipass: true,
					plugins: [
						{ name: 'removeViewBox', active: false },
						{ name: 'removeDimensions', active: true },
						{ name: 'removeUselessStrokeAndFill', active: true },
						{ name: 'removeEmptyAttrs', active: true },
						{ name: 'removeMetadata', active: true },
						{ name: 'removeComments', active: true }
					]
				},
				// 缓存配置，避免重复压缩
				cache: true,
				// 只压缩大于 1KB 的文件
				threshold: 1024,
				// 压缩比例阈值，只有压缩效果超过 10% 才应用
				compressionRatio: 0.9,
			})
		],
		resolve: {
			alias: {
				'@': fileURLToPath(new URL('./src', import.meta.url))
			},
		},
		base: command === 'build' ? '/ui/' : '/',
		server: {
			proxy: {
				'/api': {
					target: env.VITE_PROXY_TARGET,
					changeOrigin: true,
					rewrite: (path) => path.replace(/^\/api/, '')
				},
			}
		},
		define: {
			// 将环境变量注入到应用中
			__APP_ENV__: JSON.stringify(env.NODE_ENV),
		}
	}
})
